#include<error.h>
#include<stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<string.h>
//#include<string.h>
//
//int main()
//{
//      FILE*fp=fopen("myfile","r");//C语言接口，里面封装了open// 
//      if(!fp){
//        printf("fopen error\n");
//      }
//      char ch;
////    char buf[1024];
////    const char*msg="hello  world\n";
////    while(1)
////    {
////    size_t s=fread(buf,1,5,fp);
////    if(s>0) {
////        buf[s]='\0';
////        printf("%s\n",buf);
////    }
////   if(feof(fp))//检测文件到没到最后
////               break;
////    }
////    //int a[15]={1,2,3,4,5,6,7,8};
////    const char*msg="hello world!\n";
////    int count=1;
////    while(count--){
////        fwrite(msg,strlen(msg),1,fp);//C接口，1指的是要读入几个前面的长数据进去
////      //  fwrite(a,sizeof(int),4,fp);//C接口，1指的是要读入几个前面的长数据进去
////    }
////    fclose(fp);
////    const char*hello="hello world\n";
////    printf("hello world\n");
////    fwrite(hello, strlen(hello),1,stdout);
////    fprintf(stdout,"hello world\n");
////// fread(stdout,1,strlen(hello),fp);
////   fseek复习
////    fseek(fp,1,SEEK_CUR);//获取偏移量为1的字符
////    ch =fgetc(fp);
////    printf("%c\n",ch);
////    ftell()复习获取当前读取到哪里
//
////     fseek(fp,1,SEEK_CUR);//获取偏移量为1的字符
////     ch =fgetc(fp);
////     int a=ftell(fp);
////     printf("%c\n",ch);
////     printf("%d\n",a);
////     rewind()函数//让文件指针回到起始位置
//     fseek(fp,1,SEEK_CUR);//获取偏移量为1的字符
//     ch =fgetc(fp);
//     int a=ftell(fp);
//     printf("%c\n",ch);
//     printf("%d\n",a);
//     rewind(fp);
//     a=ftell(fp);
//     printf("%d\n",a);
//
//      return 0;
//}
//int main()
//{
//   umask(0);//权限补码
////   int fd=open("myfile",O_WRONLY|O_CREAT,0644);//以写的权限打开，如果没有就创建
////   if(fd<0)//fd为文件码
////   {
////      perror("open fail");
////      return 1;
////   }
////   int count=5;
////   const char* msg="hello world\n";
////   int len=strlen(msg);
////   while(count--){
////      write(fd,msg,len);
////   }
////   close(fd);
////   return 0;
//   FILE* fd=fopen("myfile","w");
//   if(!fd)//若为空指针
//   {
//      perror("open fail");
//      return 1;
//   }
//   int count=5;
//   const char* msg="hello world\n";
//   int len=strlen(msg);
//   while(count--){
//      fwrite(msg,len,1,fd);//这里写入的是C语言的缓冲区
//   }
//   fclose(fd);//关闭文件的时候会清空缓冲区
//   fork();//如果有fork，则在关闭文件时候，父子进程发生写时拷贝
//  // fclose(fd);
//   return 0;
//}
//int main()
//{
//   int fd=open("myfile",O_RDONLY);//以只读权限打开文件
//   if(fd<0)
//   {
//       perror("open failed");
//       return 1;
//   }
//   const char*msg="hello world";
//   char buf[1024];
//   while(1)
//   {
//       size_t s=read(fd,buf,strlen(msg));//从fd文件中读取strlen(msg)长度的字符到buf里
//       if(s>0)
//       {
//           buf[strlen(msg)]='\0';
//           printf("%s",buf);
//          // return 0;
//       }
//       else{
//           break;
//       }
//   }
//   close(fd);
//   return 0;
//}
//int main()
//{
//   // char buf[1024];
//   // size_t s=read(0,buf,strlen(buf));
//   // if(s>0)
//   // {
//   //     buf[s]='\n';
//   //     write(1,buf,strlen(buf));
//   //     write(2,buf,strlen(buf));
//   // }
//   // return 0;
//   close(0);
//   int fd=open("myfile",O_RDONLY);
//   if(fd<0)
//   {
//       perror("open failed");
//       return -1;
//   }
//   printf("%d",fd);
//   close(fd);
//   return 0;
//}
int main()
{
    int fd=open("world",O_RDONLY| O_APPEND);
    if(fd<0)
    {
        perror("open failed");
        return -1;
    }
    close(1);
    int cnt=5;
    int fd2= dup2(fd,1);//对fd的文件进行重定向
    while(cnt--)
    {
       char buf[1024]={0};
       int s =read(0,buf,sizeof(buf)-1);
       if(s<0)
       {
           perror("read failed");
           return -1;
       }
       printf("%s",buf);
       fflush(stdout);
     }
    return 0;
}
